package org.wu.framework.lazy.orm.database.jpa.repository;


import java.util.Optional;

/**
 * @param <T>  do对象
 * @param <ID> 主键
 *            lazy repository crud
 */
@NoLazyRepositoryBean
public interface LazyCrudRepository<T, ID> extends LazyRepository<T, ID> {

    /**
     * 新增单条数据
     * @param entity 新增对象
     * @return 新增对象
     * @param <S> 模型对象
     */
    <S extends T> S save(S entity);

    /**
     * 根据ID获取对象
     * @param id 主键ID
     * @return 返回对象
     */
    Optional<T> findById(ID id);

    /**
     * 通过ID判断对象是否存在
     * @param id 主键ID
     * @return 布尔类型
     */
    boolean existsById(ID id);

    /**
     * 统计数据
     * @return 统计数据数量
     */
    long count();

    /**
     * 根据ID删除数据
     * @param id 主键ID
     */
    void deleteById(ID id);

    /**
     * 删除数据 自动过滤空数据
     * @param entity 删除数据条件
     */
    void delete(T entity);



}
